package event

type Mediator struct {
	events map[Name][]func(interface{})
}

var MediatorInstance *Mediator

func GetMediatorInstance() *Mediator {
	if MediatorInstance == nil {
		MediatorInstance = &Mediator{
			events: make(map[Name][]func(interface{})),
		}
	}
	return MediatorInstance
}

func (m *Mediator) Register(eventName Name, handler func(interface{})) {
	// 通过名字查找事件列表
	list := m.events[eventName]
	// 在列表切片中添加函数
	list = append(list, handler)
	// 将修改的事件列表切片保存回去
	m.events[eventName] = list
}

func (m *Mediator) Notify(eventName Name, param interface{}) {
	// 通过名字找到事件列表
	list := m.events[eventName]
	// 遍历这个事件的所有回调
	for _, callback := range list {
		// 传入参数调用回调
		callback(param)
	}
}

func (m *Mediator) UnRegister(eventName string, handler func(interface{})) {

}
